<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- CSS only -->
    <link
      rel="stylesheet"
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
    />
    <style>
      .red {
        color: red!important;
      }
      .search {
        width: 300px;
        margin: 20px 0;
      }
      .my-form {
        display: flex;
        margin: 20px 0;
      }
      .my-form input {
        flex: 1;
        margin-right: 20px;
      }
      .table > :not(:first-child) {
        border-top: none;
      }
      .contain {
        display: flex;
        padding: 10px;
      }
      .list-box {
        flex: 1;
        padding: 0 30px;
      }
      .list-box  a {
        text-decoration: none;
      }
      .echarts-box {
        width: 600px;
        height: 400px;
        padding: 30px;
        margin: 0 auto;
        border: 1px solid #ccc;
      }
      tfoot {
        font-weight: bold;
      }
      @media screen and (max-width: 1000px) {
        .contain {
          flex-wrap: wrap;
        }
        .list-box {
          width: 100%;
        }
        .echarts-box {
          margin-top: 30px;
        }
      }
    </style>
  </head>
  <body>
    <div id="app">
      <div class="contain">
        <!-- 左侧列表 -->
        <div class="list-box">

          <!-- 添加资产 -->
          <form class="my-form">
            <input type="text" class="form-control" placeholder="消费名称" v-model.trim="name"/>
            <input type="text" class="form-control" placeholder="消费价格" v-model.trim.number="price"/>
            <button type="button" class="btn btn-primary" @click="add">添加账单</button>
          </form>

          <table class="table table-hover">
            <thead>
              <tr>
                <th>编号</th>
                <th>消费名称</th>
                <th>消费价格</th>
                <th>操作</th>
              </tr>
            </thead>
            <tbody>
              <tr v-for="item,index in list">
                <td>{{index+1}}</td>
                <td>{{item.name}}</td>
                <td :class="{red:item.price > 500}">{{item.price.toFixed(2)}}</td>
                <td><a href="javascript:;" @click="del(item.id)">删除</a></td>
              </tr>
              <!-- <tr>
                <td>2</td>
                <td>大衣</td>
                <td class="red">199.00</td>
                <td><a href="javascript:;">删除</a></td>
              </tr> -->
            </tbody>
            <tfoot>
              <tr>
                <td colspan="4">消费总计： {{total}}</td>
              </tr>
            </tfoot>
          </table>
        </div>
        
        <!-- 右侧图表 -->
        <div class="echarts-box" id="main"></div>
      </div>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.0/dist/echarts.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script>
      /**
       * 接口文档地址：
       * https://www.apifox.cn/apidoc/shared-24459455-ebb1-4fdc-8df8-0aff8dc317a8/api-53371058
       * 
       * 功能需求：
       * 1. 基本渲染
       * 2. 添加功能
       * 3. 删除功能
       * 4. 饼图渲染
       */
      const app = new Vue({
        el: '#app',
        data: {
          list:[],
          price:0,
          name:''
        },
        methods: {
          // 获取数据
          async getList(){
            const {data:{data}} = await axios.get('https://applet-base-api-t.itheima.net/bill',{params:{creator:'王五'}})
            console.log(data)
            this.list = data
            const newList = this.list.map(el => ({name:el.name,value:el.price}))
            console.log(newList)
            // echart饼图
            const myChart = echarts.init(document.getElementById("main"));
            var option = {
              title: {
                  text: "消费记账",
                  x: "center"
              },
              tooltip: {
                  trigger: "item",
                  formatter: "{a} <br/>{b} : {c} ({d}%)"
              },
              toolbox: {
                  show: true,
                  feature: {
                      dataView: {
                          readOnly: true,
                          show: true
                      },
                      restore: {
                          show: true
                      },
                      saveAsImage: {
                          show: true
                      },
                      mark: {
                          show: true
                      }
                  }
              },
              calculable: true,
              series: [
                  {
                      name: "访问来源",
                      type: "pie",
                      radius: "55%",
                      center: ["50%", "60%"],
                      itemStyle: {
                          normal: {
                              label: {
                                  show: true,
                                  formatter: "{b}: {c} ({d}%)"
                              }
                          }
                      },
                      data: newList
                  }
              ]
          }
            myChart.setOption(option)
          },
          // 删除
          async del(id){
            await axios.delete(`https://applet-base-api-t.itheima.net/bill/${id}`)
            this.getList()
          },
          // 添加
          async add(){
            // 非空判断
            if(!this.name || !this.price || this.price <= 0) alert('请输入正确的数据')
            await axios.post('https://applet-base-api-t.itheima.net/bill',{
              creator:'王五',
              name:this.name,
              price:this.price
            })
            this.getList()
            this.name = ''
            this.price = 0
          },

        },
        computed:{
          total(){
            return this.list.reduce((sum,item)=> sum + item.price ,0).toFixed(2)
          }
        },
        created(){
          this.getList()
        },
        mounted() {
          this.getList()
        },
      })
    </script>
  </body>
</html>
